package com.king.tv.http;

import android.content.Context;
import android.util.Log;

import com.king.tv.App;
import com.king.tv.bean.AddUserBean;
import com.king.tv.bean.MovieMenu;

import org.json.JSONObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * @author Answer
 * retrofit请求处理
 * Created by Answer on 2018/2/27.
 */

public class HttpLoader extends ObjectLoader {
    private HttpService mhttpService;
    private App myapplication;
    private static HttpLoader instance;
    public static HttpLoader getInstance(){
        if(instance == null){
            synchronized (HttpLoader.class){
                if (instance == null){
                    instance = new HttpLoader();
                }
            }
        }
        return instance;
    }
    public HttpLoader(){
        mhttpService = RetrofitServiceManager.getInstance().create(HttpService.class);
//        this.myapplication = (App) context.getApplicationContext();
    }
    /**
     * 登陆请求
     * @param
     * @param
     * @return
     */
//    public Observable<BaseCallModel<User>> HttpLogin(String psd){
////        String UMENG_CHANNEL = ManifestMetaData.getString(myapplication,"UMENG_CHANNEL");
//        String UMENG_CHANNEL = "liaotian";
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("password",psd);
//        params.put("qudao", UMENG_CHANNEL);
//        params.put("model", android.os.Build.MODEL);
//        params = ApiClient.makeParamMap(params);
//        Log.i("tag","==============params"+params);
//       return observe(mhttpService.getWeather(params));
//    }
    /**
     * 拨号请求
     * @param
     * @param
     * @return
     */
//    public Observable<BaseCallModel<String>> HttpCallout(String userID, String vCalleeNbr){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID",userID);
//        params.put("vCalleeNbr", vCalleeNbr);
//        params = ApiClient.makeParamMap(params);
//        Log.i("tag","==============params"+params);
//        return observe(mhttpService.getCallout(params));
//    }

//    /**
//     * 修改密码
//     * @param username
//     * @param password
//     * @return
//     */
//    public Observable<BaseCallModel<Status>> HttpAlter(String username, String password, String oldpwd){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", username);
//        params.put("oldpwd", oldpwd);
//        params.put("password", password);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getAlter(params));
//    }
//    /**
//     * 获取文件夹数据
//     * @param
//     * @param
//     * @return
//     */
//    public Observable<BaseCallModel<List<FoldersAndFileRoot>>> HttpFolder(){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID",myapplication.getDbUserId(context));
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getFolder(params));
//    }
    /**
     * 获取录音列表
     * @param
     * @param
     * @return
     */
//    public Observable<BaseCallModel<List<FoldersAndFilesEva>>> HttpRecord(String userID, String folderID, String folderType, int startIndex){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params.put("folderID", folderID);
//        if (!StringUtils.isEmpty(folderType)) {
//            params.put("folderType", folderType);
//        }
//        params.put("startIndex", startIndex);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getRecord(params));
//    }
//    /**
//     * 获取录音列表
//     * @param
//     * @param
//     * @return
//     */
//    public Observable<BaseCallModel<RecordInfo>> HttpInfo(String userID, String fileID){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("fileID", fileID);
//        params.put("userID", userID);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getInfo(params));
//    }
//
//    /**
//     * 获得金额列表
//     * @return
//     */
//    public Observable<BaseCallModel<MoneyNum>> HttpMoney(){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getNum(params));
//    }
//
//    /**
//     * 支付
//     * @param userID
//     * @param paytype
//     * @param price
//     * @return
//     */
//    public Observable<BaseCallModel<PayInitBean>> HttpPay(String userID, String paytype, String price){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params.put("payType", paytype);
//        params.put("price", price);
//        params.put("appType","1");
//        params.put("encryptCharge","jiami");
//        params = ApiClient.makeParamMap(params);
//        if(paytype.equals("105")){
//            return observe(mhttpService.getWXPay(params));
//        }else{
//            return observe(mhttpService.getPay(params));
//        }
//    }
//
//    /**
//     * 支付结果
//     * @param userid
//     * @param paytype
//     * @param result
//     * @return
//     */
//    public Observable<BaseCallModel<PayResult>> HttpResult(String userid, String paytype, String result){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userid);
//        params.put("payType", paytype);
//        params.put("result", result);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getResult(params));
//    }
//
//    /**
//     * 用户中心
//     * @param userid
//     * @return
//     */
//    public Observable<BaseCallModel<Usercenter>> HttpCenter(String userid){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userid);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getCenter(params));
//    }
//
//    /**
//     * 验证码
//     * @param validType
//     * @return
//     */
//    public Observable<BaseCallModel> HttpYan(String validType){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("validType",validType);
//        params = ApiClient.makeParamMap(params);
//        Log.i("tag","==========params"+params);
//        return observe(mhttpService.getYan(params));
//    }
//
//    /**
//     * 注册
//     * @param password
//     * @param validNo
//     * @return
//     */
//    public Observable<BaseCallModel<String>> HttpRegister(String password, String validNo){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("password", password);
//        params.put("validNo", validNo);
//        params.put("qudao", "jiami");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getRegister(params));
//    }
//
//    /**
//     * 重置密码
//     * @param validNo
//     * @return
//     */
//    public Observable<BaseCallModel> HttpPsdreset(String validNo){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("validNo", validNo);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getresetpsd(params));
//    }
//
//    /**
//     * 签到接口
//     * @param userid
//     * @return
//     */
//    public Observable<BaseCallModel<String>> HttpSign(String userid){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID",userid);
//        params.put("action", "sign");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getSign(params));
//    }

//    /**
//     * 联系我们
//     * @param userid
//     * @param feedbackMsg
//     * @return
//     */
//    public Observable<BaseCallModel> HttpUs(String userid, String feedbackMsg, String action){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userid);
//        params.put("qudao", "jiami");
//        params.put("feedbackMsg", feedbackMsg);
//        params.put("feedbackType", action);
//        params.put("action","");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getUs(params));
//    }

//    /**
//     * 消息中心
//     * @param userid
//     * @param startIndex
//     * @return
//     */
//    public Observable<BaseCallModel<List<Message>>> HttpMessage(String userid, int startIndex){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userid);
//        params.put("startIndex", startIndex);
//        params.put("sysmsgId", "");
//        params.put("action", "");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getMessage(params));
//    }

//    /**
//     * 文件删除
//     * @param userID
//     * @param fileIDs
//     * @return
//     */
//    public Observable<BaseCallModel> Httpfiledel(String userID, String fileIDs){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params.put("fileIDs", fileIDs);
//        params.put("folderIDs", "");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getfiledel(params));
//    }
//
//    /**
//     * 系统消息更新
//     * @param userID
//     * @param sysmsgId
//     * @return
//     */
//    public Observable<BaseCallModel> Httpmsgupdate(String userID, String sysmsgId){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params.put("sysmsgId", sysmsgId);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getMsgUpdate(params));
//    }
//
//    /**
//     * 消息删除
//     * @param userID
//     * @param sysmsgId
//     * @return
//     */
//    public Observable<BaseCallModel> Httpmsgdel(String userID, String sysmsgId){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params.put("startIndex","");
//        params.put("sysmsgId", sysmsgId);
//        params.put("action","del");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getdelmsg(params));
//    }
//    /**
//     * 消息删除
//     * @param userID
//     * @return
//     */
//    public Observable<BaseCallModel> Httppl(String userID){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params.put("action", "sign");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getpl(params));
//    }
//    /**
//     * 获取帮瀛价格
//     * @return
//     */
//    public Observable<BaseCallModel<BangYPrice>> HttpBYPrice(){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getByPrice(params));
//    }
//    /**
//     * 获取支付订单
//     * @return
//     */
//    public Observable<String> HttpSmsPrice(String userid,String payType,String content,String money){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userid);
//        params.put("payFuncType", "3");
//        params.put("payType",payType);
//        params.put("content", content);
//        params.put("funcMoney",money);
//        params.put("encryptCharge","jiami");
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getSmsPay(params));
//    }
//    /**
//     * 验签接口
//     * @param userID
//     * @param payType
//     * @param result
//     * @return
//     */
//    public Observable<BaseCallModel> HttpAliResultChecK(String userID, String payType, String result){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params.put("payType", payType);
//        params.put("result", result);
//        params = ApiClient.makeParamMap(params);
//        return observe(mhttpService.getAliResultCheck(params));
//    }
//    /**
//     * 查看是否充值
//     * @param userID
//     * @return
//     */
//    public Observable<BaseCallModel<PaidResult>> HttpgetPaid(String userID){
//        HashMap<String, Object> params = new HashMap<String, Object>();
//        params.put("userID", userID);
//        params = ApiClient.makeParamMap(params);
//        Log.i("tag","========params"+params);
//        return observe(mhttpService.getIsPaid(params));
//    }
//    /**
//     * 获取文件夹数据
//     * @param
//     * @param
//     * @return
//     */
////    public Observable<BaseCallModel<List<FoldersAndFilesRoot>>> HttpFolder(){
////        HashMap<String, Object> params = new HashMap<String, Object>();
////        params.put("userID",myapplication.getUserId(context));
////        params = ApiClient.makeParamMap(params);
////        return observe(mhttpService.getFolder(params));
////    }


        public Observable<AddUserBean> addUser(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getUser(params));
        }
    public Observable<String> AlterUser(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("id","ba65546d-d4bb-474e-ae62-9d7443129977");
        params.put("nickname","白痴");
        params.put("pic","");
        params = ApiClient.makeParamMap(params);
        Log.i("tag","OKHttp====param"+params);
//        HashMap<String, Object> params1 = new HashMap<String, Object>();
//        params1.put("paramMap",params);
//        Log.i("tag","OKHttp====param"+params1.toString());
        return observe(mhttpService.AlterUser(params));
    }

    public Observable<BaseCallModel<List<MovieMenu>>> getMovieMenu(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getMenu(params));
    }
    public Observable<Object> getMovie(String menuid,String type){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("menuId",menuid);
        params.put("type",type);
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getVideo(params));
    }
    public Observable<Object> getService(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getCostomer(params));
    }
    public Observable<Object> getHotM(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getHotMovie(params));
    }
    public Observable<BaseCallModel<String>> getMovieurl(String objectName){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("objectName",objectName);
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getMovieUrl(params));
    }
    public Observable<BaseCallModel<String>> getBind(String userid,String personcode){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("usercode",userid);
        params.put("extensionCode",personcode);
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.bindperson(params));
    }
    public Observable<BaseCallModel<Object>> getShareInfo(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getShare(params));
    }
    public Observable<BaseCallModel<Object>> getNoticeInfo(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getNotice(params));
    }
    public Observable<BaseCallModel<Object>> getLiveImage(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getLiveImg(params));
    }
    public Observable<BaseCallModel<Object>> getPrice(){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getHttpPrice(params));
    }
    public Observable<BaseCallModel<Object>> getUser(String usercode){
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("usercode",usercode);
        params = ApiClient.makeParamMap(params);
        return observe(mhttpService.getHttpUser(params));
    }
    public interface HttpService{
         //登录请求
//         @FormUrlEncoded
//         @POST("login.action")
//         Observable<BaseCallModel<User>> getWeather(@FieldMap Map<String, Object> map);
//         //拨号请求
//         @FormUrlEncoded
//         @POST("sendCalleeToCC.action")
//         Observable<BaseCallModel<String>> getCallout(@FieldMap Map<String, Object> map);
//         //修改密码
//         @FormUrlEncoded
//         @POST("pwdmodify.action")
//         Observable<BaseCallModel<Status>> getAlter(@FieldMap Map<String, Object> map);
//         //获取文件夹数据
//         @FormUrlEncoded
//         @POST("evidenceRootList.action")
//         Observable<BaseCallModel<List<FoldersAndFileRoot>>> getFolder(@FieldMap Map<String, Object> map);
//         //获取文件列表
//         @FormUrlEncoded
//         @POST("evidenceList.action")
//         Observable<BaseCallModel<List<FoldersAndFilesEva>>>getRecord(@FieldMap Map<String, Object> map);
//         //获取文件详情
//         @FormUrlEncoded
//         @POST("fileInfo.action")
//         Observable<BaseCallModel<RecordInfo>> getInfo(@FieldMap Map<String, Object> map);
//         //获取公证金额
//         @FormUrlEncoded
//         @POST("qryChargeNumList.action")
//         Observable<BaseCallModel<MoneyNum>> getNum(@FieldMap Map<String, Object> map);
//         //支付宝支付金额
//         @FormUrlEncoded
//         @POST("payNewInit.action")
//         Observable<BaseCallModel<PayInitBean>> getPay(@FieldMap Map<String, Object> map);
//         //微信支付金额
//         @FormUrlEncoded
//         @POST("payInit.action")
//         Observable<BaseCallModel<PayInitBean>> getWXPay(@FieldMap Map<String, Object> map);
//         //验证签名
//         @FormUrlEncoded
//         @POST("payApplyGzResultCheck.action")
//         Observable<BaseCallModel<PayResult>> getResult(@FieldMap Map<String, Object> map);
//         //加密币余额
//         @FormUrlEncoded
//         @POST("feeQuery.action")
//         Observable<BaseCallModel<Usercenter>> getCenter(@FieldMap Map<String, Object> map);
//         //短信验证码
//         @FormUrlEncoded
//         @POST("valNumQry.action")
//         Observable<BaseCallModel> getYan(@FieldMap Map<String, Object> map);
//         //注册账号
//         @FormUrlEncoded
//         @POST("regInfo.action")
//         Observable<BaseCallModel<String>> getRegister(@FieldMap Map<String, Object> map);
//         //重置密码
//         @FormUrlEncoded
//         @POST("resetPwd.action")
//         Observable<BaseCallModel> getresetpsd(@FieldMap Map<String, Object> map);
//         //签到
//         @FormUrlEncoded
//         @POST("sign.action")
//         Observable<BaseCallModel<String>> getSign(@FieldMap Map<String, Object> map);
//         联系我们 1.用户反馈 3.加密短信
//         @FormUrlEncoded
//         @POST("contactCusCtr.action")
//         Observable<BaseCallModel> getUs(@FieldMap Map<String, Object> map);
//         //消息中心
//         @FormUrlEncoded
//         @POST("sysMsgQry.action")
//         Observable<BaseCallModel<List<Message>>> getMessage(@FieldMap Map<String, Object> map);
//         //文件删除
//         @FormUrlEncoded
//         @POST("delFolderAndFile.action")
//         Observable<BaseCallModel> getfiledel(@FieldMap Map<String, Object> map);
//         //消息更新
//         @FormUrlEncoded
//         @POST("sysMsgUpdate.action")
//         Observable<BaseCallModel> getMsgUpdate(@FieldMap Map<String, Object> map);
//         //消息删除
//         @FormUrlEncoded
//         @POST("sysMsgQry.action")
//         Observable<BaseCallModel> getdelmsg(@FieldMap Map<String, Object> map);
//         //评论接口
//         @FormUrlEncoded
//         @POST("comments.action")
//         Observable<BaseCallModel> getpl(@FieldMap Map<String, Object> map);
//        //获取帮瀛价格
//        @FormUrlEncoded
//        @POST("openAppPrice.action")
//        Observable<BaseCallModel<BangYPrice>> getByPrice(@FieldMap Map<String, Object> map);
//        //加密短信支付
//        @FormUrlEncoded
//        @POST("law/otherFuncPay.action")
//        Call<String> getSmsPay(@FieldMap Map<String, Object> map);
//        //心理咨询支付
//        @FormUrlEncoded
//        @POST("law/otherFuncPay.action")
//        Call<String> getXinliPay(@FieldMap Map<String, Object> map);
//        //新支付宝验签接口
//        @FormUrlEncoded
//        @POST("law/otherPayResultCheck.action")
//        Observable<BaseCallModel> getAliResultCheck(@FieldMap Map<String, Object> map);
//        //是否充值接口 userCharge.action
//        @FormUrlEncoded
//        @POST("userCharge.action")
//        Observable<BaseCallModel<PaidResult>> getIsPaid(@FieldMap Map<String, Object> map);
    @FormUrlEncoded
    @POST("/api/addUser")
    Observable<AddUserBean> getUser(@FieldMap Map<String, Object> map);
    @FormUrlEncoded
    @POST("/api/updateUser")
    Observable<String> AlterUser(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/getMenu")
        Observable<BaseCallModel<List<MovieMenu>>> getMenu(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/getVideo")
        Observable<Object> getVideo(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/getCustomer")
        Observable<Object> getCostomer(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/getHotVideo")
        Observable<Object> getHotMovie(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/authorizationVideo")
        Observable<BaseCallModel<String>> getMovieUrl(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/bindingExtension")
        Observable<BaseCallModel<String>> bindperson(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/getShare")
        Observable<BaseCallModel<Object>> getShare(@FieldMap Map<String, Object> map);
//        /api/getNotice
        @FormUrlEncoded
        @POST("/api/getNotice")
        Observable<BaseCallModel<Object>> getNotice(@FieldMap Map<String, Object> map);
//        /api/getLiveTopImg
        @FormUrlEncoded
        @POST("/api/getLiveTopImg")
        Observable<BaseCallModel<Object>> getLiveImg(@FieldMap Map<String, Object> map);
        @FormUrlEncoded
        @POST("/api/getRechargePrice")
        Observable<BaseCallModel<Object>> getHttpPrice(@FieldMap Map<String, Object> map);
//        /api/getUser
        @FormUrlEncoded
        @POST("/api/getUser")
        Observable<BaseCallModel<Object>> getHttpUser(@FieldMap Map<String, Object> map);
    }
}
